package com.yonyou.cyxdms.sysAuth.service.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yonyou.cyx.framework.dao.base.SuperMapper;
import com.yonyou.cyxdms.sysAuth.service.dto.UserDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.user.EmployeeDTO;
import com.yonyou.cyxdms.sysAuth.service.entity.EmployeePO;
import com.yonyou.cyxdms.sysAuth.service.vo.employee.*;
import com.yonyou.cyxdms.sysmanage.client.domains.dto.EmployeeDictDto;
import com.yonyou.cyxdms.sysmanage.client.vo.employee.EmployeeOrgsVO;
import com.yonyou.cyxdms.sysmanage.client.vo.employee.EmployeeVO;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 经销商员工 Mapper 接口
 * </p>
 *
 * @author quankk
 * @since 2019-05-21
 */
@Mapper
public interface EmployeeMapper extends SuperMapper<EmployeePO> {
    /**
     * 查询所有的销售顾问
     *
     * @return
     * @throws
     */
    public List<EmployeeVO> getEmployees(EmployeeDTO employeeDTO);

    /**
     * 根据销售顾问编号查询销售顾问名称
     *
     * @param employeeDTO
     * @return com.yonyou.cyxdms.basedata.service.entity.employee.EmployeeVO
     * @author guorp
     * @since 2019/1/2
     */
    public EmployeeVO getEmployeesByEmployeeNO(EmployeeDTO employeeDTO);

    List<EmployeeVO> employeeByDealerCode(@Param("appId") String appId, @Param("dealerCode") String dealerCode, @Param("orgId") String orgId);


    List<EmployeeVO> getEmployeeNoByLikeEmployeeName(@Param("appId") String appId, @Param("dealerCode") String dealerCode, @Param("employeeName") String employeeName);

    /**
     * 根据角色查询销售顾问
     *
     * @param roleType
     * @param isOnJob
     * @param dealerCode
     * @return java.util.List<com.yonyou.cyxdms.basedata.client.domains.vo.EmployeeVO>
     * @author renwd
     * @since 2019/3/21
     */
    List<EmployeeVO> getEmployeesByPosition(@Param("roleType") Integer roleType, @Param("isOnJob") Integer isOnJob, @Param("dealerCode") String dealerCode);


    EmployeePO getByEmpId(@Param("empId") Integer empId);

    int deleteByEmpIds(@Param("empId") List<Integer> empIds);

    /**
     * 销售顾问下拉数据
     *
     * @param isOnJob
     * @param dealerCode
     * @param role
     * @param appId
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.ConsultantVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<ConsultantVO> qryPowerSalesConsultant(@Param("isOnJob") Integer isOnJob, @Param("dealerCode") String dealerCode,
                                               @Param("role") Integer role, @Param("appId") String appId);

    /**
     * 电销顾问下拉数据
     *
     * @param role
     * @param isOnJob
     * @param dealerCode
     * @param appId
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.ConsultantVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<ConsultantVO> qryTelemarkConsultant(@Param("role") Integer role, @Param("isOnJob") String isOnJob,
                                             @Param("dealerCode") String dealerCode, @Param("appId") String appId);

    /**
     * 员工信息下拉框调用的方法
     *
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.employee.EmployeeSelectVO>
     * @author renwd
     * @since 2019/7/9
     */
    List<EmployeeSelectVO> selectEmployees(@Param("params") Map<String, Object> queryParam);

    /**
     * @author ：quankk
     * @date ：2019/7/10 16:06
     * @description：
     */
    List<EmployeeSearchVO> search(Page<EmployeeSearchVO> page, @Param("params") Map<String, String> param);

    /**
     * @author ：quankk
     * @date ：2019/7/10 17:42
     * @description：
     */
    List<Map<String, Object>> findEmpRolesByEmpId(@Param("id") Long id);

    /**
     * @author ：quankk
     * @date ：2019/7/10 17:45
     * @description：
     */
    EmployeeVO findUserByEmployeeId(@Param("id") Long id);

    /**
     * @author ：quankk
     * @date ：2019/7/10 17:49
     * @description：
     */
    List<Map> findEmpPositionIdsByEmpId(@Param("id") Long id);

    /**
     * 分页查询公司组织
     *
     * @param page
     * @param queryCondition
     * @return java.util.List<com.yonyou.cyxdms.sysAuth.service.vo.companyorg.CompanyOrgPageVO>
     * @author renwd
     * @since 2019/7/8
     */
    List<EmployeeUsersVO> searchUserEmployees(Page page, @Param("params") Map<String, Object> queryCondition);

    /**
     * @author ：quankk
     * @date ：2019/7/17 11:40
     * @description：
     */
    EmployeeVO findById(@Param("id") Long id);

    /**
     * @param id
     * @author ：maxingjian
     * @date ：2019/7/12
     * @description：
     */
    List<Map<String, Object>> findEmployeeRoleById(@Param("id") Long id);


    /**
     * @param menuId      菜单权限id
     * @return menuId, userId, appId
     */
    String findAuthorization(@Param("menuId") Long menuId, @Param("userId") String userId,@Param("appId") String appId);


    List<EmployeeSearchVO> search2(Page<EmployeeSearchVO> page, @Param("params") Map<String, String> param);

    public EmployeeDTO loginByNameOrPhone(@Param("vUser") String vUser, @Param("vPwd") String vPwd, @Param("isInit") String isInit);

    public UserDTO getUserInfo(@Param("id") String id);

    public int resetPwdByPhone(@Param("vPwd") String vPwd, @Param("vMobile") String vMobile, @Param("vPwdOld") String vPwdOld, @Param("flag") String flag);

    public int resetPwdByPno(@Param("name") String name, @Param("pwd") String pwd, @Param("newPassword") String newPassword);

    public EmployeeDTO getEmpInfoByOpenId(@Param("openId") String openId);

    public EmployeeDTO getEmpInfoByAppId(@Param("openId") String openId);

    public int updateWXOpenId(@Param("vMobile") String vMobile, @Param("openId") String openId);

    public int updateAppOpenId(@Param("vMobile") String vMobile, @Param("openId") String openId, @Param("vWXNickName") String vWXNickName);

    public int updateInitPwd(@Param("vMobile") String vMobile, @Param("vInitPWD") String vInitPWD);

    public EmployeeDTO findEmpInfo(@Param("vUser") String vUser);

    public EmployeeDTO findEmpBind(@Param("vMobile") String vMobile);

    public int updateLoginFailNum(@Param("vUser") String vUser, @Param("vState") int vState, @Param("nLoginFailNum") int nLoginFailNum);

    public EmployeeDictDto getEmployeeById(@Param("employeeId") Long employeeId);

    List<EmployeeOrgsVO> selectEmployeesByOrgIds(@Param("orgIds") String orgIds, @Param("code") Integer code);

    List<EmployeeSearVO> employeeSearch(@Param("page") Page<EmployeeSearVO> page, @Param("searchParamVO") SearchParamVO searchParamVO, @Param("companyId") Long companyId);

    List<EmployeeSearVO> factoryEmployeeSearch(@Param("page") Page<EmployeeSearVO> page, @Param("searchParamVO") SearchParamVO searchParamVO, @Param("appId") String appId, @Param("companyId") Long companyId);

    List<EmployeeSearBindVO> employeeSearchBind(@Param("page") Page<EmployeeSearBindVO> page, @Param("searchParamVO") SearchBindParamVO searchParamVO, @Param("companyId") Long companyId);

    List<EmployeeSearBindVO> employeeSearchBind2(@Param("page") Page<EmployeeSearBindVO> page, @Param("searchParamVO") SearchBindParamVO searchParamVO, @Param("companyId") Long companyId);

    EmployeeAddVO findEmployeeByNo(@Param("employeeNo") String employeeNo, @Param("appId") String appId, @Param("companyId") Long companyId);

    IPage<PositionVO> findPosition(Page page, @Param("employeeNo") String employeeNo,@Param("appId") String appId);

    Integer findUserIdByNo(@Param("employeeNo") String employeeNo, @Param("appId") String appId, @Param("companyId") Long companyId);

    List<Long> findRoleIds(@Param("userOrgId") Long userOrgId);

    List<Long> selectRoleIds(@Param("userId") Integer userId, @Param("orgId") Integer orgId);

    /**
     * 通过条件查询各种用户
     *
     * @param params
     * @EmployeeOrgsVO
     * @auth: maxingjian
     */
    List<EmployeeOrgsVO> selectEmployeesByParams(@Param("params") Map<String,Object> params);

    IPage<PositionVO> findUserPosition(@Param("page") Page page, @Param("employeeNo") String employeeNo);

    PositionVO findUserOrgPosition(@Param("userOrgId") Long userOrgId);

    void updateOwnerCode( @Param("ownerCode") String ownerCode, @Param("oldUserCode") String oldUserCode, @Param("appId") String appId);


    /**
     * @param time
     * @author ：maxingjian
     * @date ：2019/10/23
     * @description：
     */
    List<Map<String, Object>> getEmployee(@Param("time") String time);

    Long findEmpIdByEmployeeNo(@Param("employeeNo") String employeeNo, @Param("companyId") Long companyId);

    Integer getOrgId(@Param("params") String appId, @Param("params") String companyCode, @Param("params") Integer companyId);

    String findEmployeeNosByEmpId(@Param("empId") Long empId, @Param("companyId") Long companyId);

    String selectMaxNo(@Param("empId") Long empId, @Param("companyId") Long companyId);

	//CMS-更改-{1850【经销商区域经理维护】人员角色属性包含“区域经理”的，人员角色分配后自动带入到区域经理维护功能中}-START
	/**
	 * 根据 USER_ID，ORG_TYPE，POSITION_CODE（或更多） 查询
	 * @return
	 * @author baiyuxin
	 * @date 2019年11月5日
	 */
	List<Map<String,Object>> findUserOrgRolePosition(@Param("queryParam") Map<String,Object> queryParam);
	//CMS-更改-{1850【经销商区域经理维护】人员角色属性包含“区域经理”的，人员角色分配后自动带入到区域经理维护功能中}-END

    void deleteByEmployeeIds(@Param("ids") List<Long> ids);

    Integer findMaxEmployeeNo(@Param("companyId") Long companyId);

    List<EmployeeSearClaimVO> employeeSearchClaim(@Param("page") Page<EmployeeSearClaimVO> page, @Param("searchParamVO") SearchParamVO searchParamVO,@Param("companyId") Long companyId);

    List<EmployeeVO> getEmployeeByUserIds(@Param("userIds") String[] userIds);
}
